# 默认目标
all: bin/main

# 链接目标文件生成可执行文件
bin/main: hello.o main.o
	gcc hello.o main.o -o bin/main

# 编译hello.c生成hello.o
hello.o: hello.c hello.h
	gcc -c hello.c -o hello.o -fno-pic

# 编译main.c生成main.o
main.o: main.c hello.h
	gcc -c main.c -o main.o -fno-pic

# 生成预处理文件
hello.i: hello.c
	gcc -E hello.c -o hello.i

# 生成汇编文件
hello.s: hello.c
	gcc -S hello.c -o hello.s

# 从汇编文件生成目标文件（可选规则）
hello_from_s.o: hello.s
	gcc -c hello.s -o hello_from_s.o

# 运行程序
run: bin/main
	./bin/main

# 清理生成的文件
clean:
	rm -f bin/main *.s *.o *.i

# 声明伪目标
.PHONY: all run clean
